Object Oriented Programming (OOP) is the preferred environment for building user-friendly, intelligent computer software. Key elements of OOP are data encapsulation, inheritance and polymorphism. These elements may be used to generate a Graphical User Interface (GUI), typically characterized by a windowing environment having icons, mouse cursors and menus. While these three key elements are common to OOP languages, most OOP languages implement the three key elements differently.
Examples of OOP languages are Smalltalk, Object Pascal and C++. Smalltalk is actually more than a language; it might more accurately be characterized as a programming environment. Smalltalk was developed in the Learning Research Group at Xerox's Palo Alto Research Center (PARC) in the early 1970s. In Smalltalk, a message is sent to an object to evaluate the object itself. Messages perform a task similar to that of function calls in conventional programming languages. The programmer does not need to be concerned with the type of data; rather, the programmer need only be concerned with creating the right order of a message and using the right message. Object Pascal is the language used for Apple's Macintosh.RTM. computers. Apple developed Object Pascal with the collaboration of Niklaus Wirth, the designer of Pascal. C++was developed by Bjarne Stroustrup at the AT&T Bell Laboratories in 1983 as an extension of C. The key concept of C++ is class, which is a user-defined type. Classes provide object oriented programming features. C++ modules are compatible with C modules and can be linked freely so that existing C libraries may be used with C++ programs. The most widely used object based and object oriented programming languages trace their heritage to Simula developed in the 1960s by O-J. Dahl, B. Myhrhaug and K. Nygard of Norway. Further information on the subject of OOP may be had by reference to Object Oriented Design with Applications by Grady Booch, The Benjimin/Cummings Publishing Co., Inc., Redwood City, Calif. (1991).
With the brief overview of OOP above in mind, color palette management presents unique problems in the programming environment. Each pixel on a color monitor's surface includes a red phosphor, a green phosphor and a blue phosphor. Each phosphor has physical properties which determine the colors which the monitor may produce. The three phosphors and the maximum equal intensity of the electron beam guns determine a color gamut of the monitor. However, while the monitor's phosphors theoretically determine which colors the device may physically produce, there are practical limitations on the number of colors each monitor can produce. For example, since computers operate in a digital (as opposed to analog) realm, the number of colors which can be practically produced on a monitor is limited to a finite number. As the number of colors the monitor may produce increases, the memory for storing a digital image of the screen increases. The memory to store the screen is usually contained on a video card.
Due to memory costs, developers have traditionally dynamically set the desired portion of the monitor's color gamut for operation. This approach uses a Color Look Up Table (CLUT). Color palettes were selectively associated with either a window in an application or the application itself. A palette management system was developed in which colors could be requested by window or by the applications. Depending upon the type of request made, colors could be shared in a friendly or unfriendly fashion. When the active window or application was changed, the palette manger would make the transition between the old active palette and the new palette in a way as visually pleasing as possible to the user.
However, while it is relatively easy to associate the CLUT with an application or window in the conventional operating systems, the preferred operating system has problems with such an association.